تحميل
النواة من
القرص المرن
هذا
الدرس أردته
استمرارا
للدرس الذي
وضعه الأخ IDOIT و الذي
يوشح كيفية
كتابة قطاع
الانطلاق.
الهدف
هو المرور إلى
المرحلة
الطبيعية
الموالية و هي
تحميل النواة
من القرص
المرن.
المطلوب
قراءة الدرس
الأول المشار
إليه أعلاه
حتى تتمكن من
فهم ما سوف
يأتي.
إذا
تتبعت الدر س
السابق فقد
وصلت إلى
مرحلة نسخ
جملة على
الشاشة
النصية بعد
تحميل قطاع الانطلاق،
وهذا هو
البرنامج
|
[BITS 16] |
الان سوف
نقوم بما يلي
1-
استعمال
الانقطاع 0x13
من أجل تحميل
النواة :
2-
كتابة
برنامج
النواة :
في هذه
المرحلة سوف
نكتفي بعرض جملة
أخرى على
الشاشة، وفي
مراحل قادمة
إن شاء الله
سنقوم بأشياء
أكثر جدية
شرح موجز
لبنية
الأقراص :
|
ناقص
: صورة لبنية
القرص |
داخل
الغلاف
البلاستيكي
يوجد قرص مغلف
بشريط
مغناطيسي (
مثل أشرطة
الفيديو)،
عندما يراد
تخزين
المعلومات
داخل القرص
يقوم قارئ الأقراص
بتشفير
المعلومات
على شكل رموز
مغناطيسية. بالطريقة
نفسها يقوم
القارئ عند
القراءة بفك
هذه الرموز و
ترجمتها إلى
رموز ثنائية (Binary).
يحتوي
القارئ على : - محرك
يقوم بجعل
القرص يدور
بسرعة معينة.
رأسين من أجل
القراءة و
الكتابة، كل
رأس في جهة (
هذا لأن القرص
المرن يحتوي
على جهتين). كل
من الرأسين
متصل بذراع
آلي يقوم
بتحريك الرأس
إلى وسط القرص
أو إلى جانبه
بطريقة دائرية.
تتقسم
مساحة القرص
إلى حلقات دائرية
بدءا بحواف
القرص و انتهاء
بوسطه ( أنظر
الرسم)، كل
حلقة مقسمة
إلى عدة
قطاعات. كل قطاع
يحتوي عى
نفس الكمية من
المعلومات،
في أغلب
الأحيان يكون
طول القطاع 512
بايت.
الأقراص
الصلبة
لها نفس
التصميم،
الفرق الوحيد
هو أنه بدل
قرص بلاستيكي
يوجد قرص من
مادة صلبة
كالزجاج مما يتيح لها
الدوران
بسرعة أكبر
بكثير من
الأقراص
المرنة. ذلك ما
يجعل القراءة
والكتابة في الأقراص
الصلبة
أسرع بكثير.
أيضا بدل
الوجه
المزدوج
للقرص المرن توجد به
عدة أقراص
مرتبة فوق
بعضها البعض.

بما أن
للقرص المرن
وجهان (و
للقرص الصلب
عدة أوجه)،
تشكل الحلقات
التي توجد في
نفس الترتيب
على مختلف
الأوجه ما
يشبه الموشور.

من
وجهة نظر المبرمج،
من أجل قراءة
أو كتابة قطاع
معين ينبغي تحديد
: 1- رقم الموشور،
2- رقم الجهة ( أو
الرأس) داخل الموشور، 3-
رقم القطاع
داخل الحلقة.
يتم
تخزين
البيانات
وفقا للترتيب
التالي، أولا
القطاع الأول
على الجهة الأولى
الموشور
الموجود على
أقصى الحافة،
ثم القطاع
الثاني إلى أن
تستنفذ كل
قطاعات
الجهة، ثم يتم
المرور إلى
الجهة الثانية
في نفس الموشور
و هكذا
دواليك، بعد
ذلك يتم
المرور إلى الموشور
الثاني
فالثالث إلى
غاية آخر موشور
في الوسط.
يجب التنبيه
هنا على أن
أرقام
القطاعات تبدأ
من 1 بينما
أرقام الموشورات
والجهات تبدأ
من الصفر.
بعد هذه
المقدمة
يمكننا
المرور إلى
كتابة البرنامج.
مباشرة
تحت السطر Call ShowMsg
أدخل
التعليمات
التالية
|
xor ax,ax int 0x13 |
استعمال
الوظيفة 0 :
الهدف هو
تهيئة القرص
من أجل
القراءة الإنقطاع 0x13 هو
المدخل إلى
الوظائف
المتعلقة بالأقراص |
|
mov ax, 0x1000 mov es,ax mov bx,0 mov ah,2 mov al,1 mov ch,0 mov cl,2 mov dh,0 mov dl, 0 int
0x13 |
استعمال
الوظيفة 2:
تقوم بقراءة
القطاعات من
القرص المرن
أو الصلب es:bx - الموقع
الذي سيحمل
إليه القطاع
(أو القطاعات)
في الذاكرة
في هذه
الحالة : 0x100:0 (= 0x1000) ah -
رقم
الوظيفة (2) dh رقم
الوجه ( القرص
المرن له
وجهان الوجه
الأول يبتدص
ب 0) dl -
رقم القارئ ( 0:
القرص المرن A ) ch
رقم الموشور cl رقم
القطاع al عدد
القطاعات
المطلوب
قراءتها |
بعد هذه
التعليمات
نكون قد حملنا
النواة إلى العنوان
0x1000:0 (أي العنوان
0x10000[=0x1000*4+0]
بالصيغة الخطية)
. للبدأ
بتنفيذ
النواة نقوم
بالقفز إلى
العنوان المذكور.
|
jmp dword 0:0x1000 |
يتم
القفز إلى
العنوان الذي
حملت إليه
النواة |
2- كتابة
برنامج
النواة
هذا البرنامج
بسيط و يقوم
فقط بكتابة
جملة kernel is loaded على
الشاشة.
أنقل
هذه التعليمات
في ملف kernel.s ثم
احفظ الملف في
نفس المجلد
الذي يحتضن
ملف قطاع
الانطلاق.
|
[BITS 16] ORG 0 |
التعليمات
مشفرة على 16 بايت يتم
إخبار Nasm بأن السجل
cs يحتوي على العنوان
0x7C0 |
|
mov si,krnlMsg krnlMsg db « kernel is loaded »,13,10,0 |
يمكن
الاستعانة بنفس
الكود الذي
استعمل في
كتابة قطاع الانطلاق. |
للترجمة
نستعمل نفس
التعليمة
Nasm f bin boot.s o boot.bin
Nasm f bin kernel.s kernel.bin
لنقل
الملفات إلى
القرص المرن
cat boot.bin kernel.bin | dd
of=/dev/fd0 bs=512 count=2880
بالنسبة
لمستعملي ويندوز
copy /b boot.bin+kernel.bin image